package com.opcode.costa.ui.dashboard;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

import com.opcode.costa.R;
import com.opcode.costa.ui.menu.MenuOptionsActivity;
import com.opcode.nebulamobil.base.activities.FragmentActivityBase;
import com.opcode.nebulamobil.base.components.ButtonBase;
import com.opcode.nebulamobil.base.components.ImageViewBase;
import com.opcode.nebulamobil.base.components.TextViewBase;
import com.opcode.nebulamobil.base.fragments.FragmentBase;
import com.opcode.nebulamobil.base.interfaces.OnButtonBaseClickListener;
import com.opcode.nebulamobil.base.interfaces.ResponseListener;
import com.opcode.nebulamobil.information.ApplicationInfo;
import com.opcode.nebulamobil.information.dataforms.costadataforms.PersonalDataForm;
import com.opcode.nebulamobil.utility.FileProcess;
import com.opcode.nebulamobil.utility.JsonConverter;


/**
 * Bu fragment uygulamanın ana menüsüne ait lojik işlemleri yapar. Ana menüde bu
 * versiyon için personel detay butonu,siparişler ve ayarlar butonu yer
 * almaktadır. İlerleyen versiyonlarda farklı özellikler eklenebilir.
 * 
 * @author Okan ERDOĞAN 12 Haz 2014
 */
public class DashBoardFragment extends FragmentBase implements ResponseListener {

	private View vi;

	/*
	 * Sipariş ekranına geçmek için gerekli butondur. Bu butona tıklanarak
	 * açılan sipariş ekranında yeni sipariş verme,sipariş ekleme ve hesap alma
	 * işlemleri yapılabilir.
	 */
	private ButtonBase orderButton;

	/*
	 * orderButton'a basıldığında sipariş aktivitesinin açılabilmesi için
	 * gerekli olan intent nesnesidir.
	 */
	private Intent orderIntent;

	/*
	 * Personele ait bilgilerin yer aldığı layout bir fragment olarak da
	 * tasarlanabilirdi.Ancak bu aşamada yalnızca bir layout tasarımı yapıldı.
	 * Bu nedenle bu layout içerisinde yer alan bütün view'lar DashBoardFragment
	 * içerisinde kontrol edilmektedir.
	 */
	private TextViewBase personalName, personalTitle, personalResponsibility;
	private PersonalDataForm personalDataForm;
	private ImageViewBase personalImage;

	@SuppressLint("NewApi")
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		this.vi = inflater.inflate(R.layout.dashboard_fragment_layout,container, false);

		/*
		 * Burada yer alan işlemlerde öncelikle personel bilgi layoutunda yer
		 * alan view'lar referansa bağlanıyor. Bu referanslara da login işlemi
		 * yapılmış olan personele ait bilgiler set edilir.
		 */
		this.personalName = (TextViewBase) this.vi.findViewById(R.id.personal_name);
		this.personalTitle = (TextViewBase) this.vi.findViewById(R.id.personal_title);
		this.personalResponsibility = (TextViewBase) this.vi.findViewById(R.id.personal_responsibility);
		this.personalImage = (ImageViewBase) this.vi.findViewById(R.id.personal_image);

		((FragmentActivityBase) getActivity()).createSharedPreferencesManager("sharedpreferences", getActivity());
		String personalDataFormAsJson = ((FragmentActivityBase) getActivity()).readFromSharedPreferences("personalDataForm", null);

		this.personalDataForm = (PersonalDataForm) JsonConverter.fromJsonString(personalDataFormAsJson, PersonalDataForm.class);

		if (personalDataForm == null) {

		} else {
			this.personalName.setText(personalDataForm.getPersonalName() + " "+ personalDataForm.getPersonelSurName());
			this.personalTitle.setText(personalDataForm.getTitle());
			this.personalResponsibility.setText(personalDataForm.getResponsibleFloor());

			if (convert(personalDataForm.getPersonelImage()) != null) {
				personalImage.setBackground(convert(personalDataForm.getPersonelImage()));
			} else {
				FileProcess fileProcess = new FileProcess();
				File file = new File(Environment.getExternalStorageDirectory()+ "//STS//personalImage//"+ String.valueOf(personalDataForm.getPersonelID())+ ".png");

				Bitmap bitmap = fileProcess.readImageFromFile(file);
				if(bitmap!=null){
					BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
					personalImage.setBackground(bitmapDrawable);	
				}		
			}
		}

		/*
		 * Sipariş vermek için gerekli olan menüyü açar.
		 */
		this.orderIntent = new Intent(this.getActivity(),MenuOptionsActivity.class);
		this.orderButton = (ButtonBase) this.vi.findViewById(R.id.order_button);
		orderButton.setOnButtonBaseClickListener(new OnButtonBaseClickListener() {		
			@Override
			public void onButtonBaseClick(View v) {
				startActivity(orderIntent);
			}

		});

		return this.vi;
	}

	/**
	 * Verilecek olan bir byte dizisinden yine verilecek olan görsel formata
	 * göre işlenip söz konusu görsel öğenin elde edilmesini sağlamak amacıyla
	 * kullanılacak olan uygulamadır.
	 */
	public Drawable convert(byte[] imageByte) {
		if (imageByte != null) {
			ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByte);
			Bitmap personalLogo = BitmapFactory.decodeStream(imageStream);
			return new BitmapDrawable(getResources(), personalLogo);
		}
		return null;
	}

	public void onResume() {
		super.onResume();
		ApplicationInfo.setResponseListener(this);
	}

	public void onStop() {
		super.onStop();
	}

	@Override
	public void responseCame(String response) {

	}
}
